package com.neusoft.liduan.d0924;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JDBC编程查询 {
	/*	步骤，不管是连哪个数据库都一样
	 * 		1、将Jar引入到项目中
	 * 		2、获取数据库连接java.sql.Connection
	 * 			1、准备数据库用户名、密码、url、driver
	 * 			2、加载驱动类到虚拟机中
	 * 			3、通过DriverManager进行数据库连接，不同数据库有包名区别
	 * 		3、准备SQL命令
	 * 		4、通过数据库连接conn获取事务java.sql.Statement对象st
	 * 			createStatement()：创建连接，不安全，容易被sql注入攻击
	 * 			prepareStatement(sql)：创建预连接，可以预防sql注入攻击
	 * 		5、通过st对象执行sql命令
	 * 			1、增删改
	 * 				Statement
	 * 					executeUpdate(sql)：返回执行成功的总数，一条都没有成功，则返回0
	 * 				prepareStatement
	 * 					executeUpdate()
	 * 				判断是否执行成功
	 * 			2、查询
	 * 				Statement
	 * 					executeQuery(sql)：
	 * 				prepareStatement
	 * 					executeQuery()：
	 * 				处理结果集
	 * 		6、关闭数据库连接
	 */
	
	public static void main(String[] args) {
		Connection conn = null;
		//1、准备数据库用户名、密码、url、driver
		String username = "root";
		String password = "root";
		String driver = "com.mysql.jdbc.Driver";
		//协议://地址:端口号/数据库名?连接属性设置
		String url = "jdbc:mysql://localhost:3306/mall?useUnicode=true&characterEncoding=utf-8";
		
		try {
			//加载驱动类到虚拟机中
			Class.forName(driver);//这是属于反射的内容
			//获取数据库连接java.sql.Connection
			conn = DriverManager.getConnection(url, username, password);
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		//准备SQL命令
		String sql = "select * from ums_admin";
		Statement st = null;
		ResultSet rs = null;
		try {
			//通过数据库连接conn获取事务java.sql.Statement对象st
			st = conn.createStatement();
			//执行sql命令
			rs = st.executeQuery(sql);
			//处理查询结果集
			while(rs.next()) {
				//rs.getInt(columnIndex)：根据索引获取列的值，强烈不推荐
				//获取id列的值
				System.out.println(rs.getInt(1));
				//rs.getInt(columnLabel)：columnLabel列名或列的别名，推荐使用
				System.out.println(rs.getInt("id"));
				//获取username列
				System.out.println(rs.getString("username"));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			if(rs != null) {
				try {
					rs.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			if(st != null) {
				try {
					st.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			if(conn != null) {
				try {
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
	}

	//练习：搜索ums_admin所有数据，并保存到Admin类的集合中，再遍历集合打印数据
}
